package com.wangshb.agent.study.javassist;

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.util.HotSwapper;

import java.util.Random;


/**
 * 利用javassist实现热部署
 *
 * 1. 需要在项目中引入tool.jar
 * 2. 在vm arguments添加 ： -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=端口
 *
 * @author wangsb12
 */
public class HotSwapperStudy {

//    public static void main(String[] args) throws Exception {
//        ApiTest apiTest = new ApiTest();
//        System.out.println("你到底有几个女朋友!!!");
//
//        new Thread(() -> {
//            while (true) {
//                System.out.println(apiTest.queryGirlfriendCount("谢飞机"));
//                try {
//                    Thread.sleep(100);
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
//            }
//        }).start();
//
//
//        HotSwapper hotSwapper = new HotSwapper(9010);
//        ClassPool pool = ClassPool.getDefault();
//        CtClass ctClass = pool.get(ApiTest.class.getName());
//
//        // 获取方法
//        CtMethod ctMethod = ctClass.getDeclaredMethod("queryGirlfriendCount");
//        ctMethod.setBody("{return $1 + \"的前女友数量\" + (0L) + \"个\";}");
//
//        System.out.println("执行HotSwapper热插拔，修改谢飞机前女友数量为0个");
//
//        hotSwapper.reload(ApiTest.class.getName(), ctClass.toBytecode());
//    }

}


class ApiTest {

    public String queryGirlfriendCount(String boyfriendName) {
        return boyfriendName + "的前女友数量：" + (new Random().nextInt(10) + 1) + " 个";
    }

}